﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Propiedad;
using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;
using UricaoWeb.Datos.Excepciones.Propiedad;

namespace UricaoWeb.Presentacion
{
    public partial class API_propiedades_ListarModificarPropiedad : API_Seguridad_Principal
    {
        private ControladorPropiedad _controladorPropiedad = new ControladorPropiedad();
        private Logica_Usuario _usuario;

        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();

            if (Session["user"] != null)
            {
                if (!IsPostBack)
                {
                    CargaInicial();
                }
            }
            else
            {
                Server.Transfer("API_Seguridad_Login_.aspx", false);
            }
        }

        #region Métodos carga Inicial, llenado estructuras, validaciones...

        public Logica_Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }

        public int idPropiedadModificar //propiedad utilizada para poder almacenar el id de la propiedad a modificar
        {                               //que luego sera enviado a la ventana de modificar propiedad
            get
            {
                return Convert.ToInt32(ListBoxPropiedades.SelectedItem.Value);
            }
        }

        /// <summary>
        /// Función para realizar la carga inicial de la página, inicializa, llena estructuras, etc
        /// </summary>
        public void CargaInicial()
        {
            this.Usuario = (Logica_Usuario)Session["user"];
            LlenarListaPropiedades("nombre", "");
            RadioButtonList1.SelectedIndex = 0;
        }

        /// <summary>
        /// Función para llenar el ListBoxPropiedades con una lista de propidades
        /// que se solicitan al controlador
        /// </summary>
        /// <param name="parametro">Tipo de la consulta a realizar</param>
        /// <param name="valorBusqueda">Valor de la consulta a realizar</param>
        public void LlenarListaPropiedades(string parametro, string valorBusqueda)
        {
            try
            {
                ListBoxPropiedades.DataSource = _controladorPropiedad.ConsultarPropiedadesConParametros(parametro, valorBusqueda);
                ListBoxPropiedades.DataTextField = "nombrePropiedad";
                ListBoxPropiedades.DataValueField = "idPropiedad";
                ListBoxPropiedades.DataBind();
            }
            catch (PropiedadException ex)
            {
                string mensaje = ex.Message;

                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "redirect script",
                            "alert('" + mensaje + "'); location.href='API_propiedades_GestionHotel.aspx';", true);
            }
        }

        #endregion

        #region Métodos interacción usuario

        /// <summary>
        /// Método disparado al cambiar de selección en el RadioButtonList1
        /// dependiendo de la selección del RadioButtonList1 se llena el ListBoxPropiedades
        /// por nombre del hotel o por nombre de la propiedad 
        /// </summary>
        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (RadioButtonList1.Text)
            {
                case "Por Nombre":
                    LlenarListaPropiedades("nombre", TextBox1.Text);
                    break;
                case "Por Hotel":
                    LlenarListaPropiedades("hotel", TextBox1.Text);
                    break;
            }
        }

        /// <summary>
        /// Método disparado al hacer click en el botón modificar
        /// se verifica que haya sido seleccionada una propiedad en el ListBoxPropiedades
        /// luego se hace el transfer hacia la ventana API_propiedades_ModificarPropiedad.aspx
        /// </summary>
        protected void botonModificar_Click(object sender, EventArgs e)
        {
            if (ListBoxPropiedades.SelectedIndex != -1)
            {
                Server.Transfer("API_propiedades_ModificarPropiedad.aspx");
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Debe seleccionar una propiedad para modificar')", true);
            }
        }

        /// <summary>
        /// Método disparado al hacer click en el botón cancelar 
        /// para abortar la operación de eliminar propiedad
        /// </summary>
        protected void botonCancelar_Click(object sender, EventArgs e)
        {
            Server.Transfer("API_propiedades_GestionHotel.aspx", false);
        }

        /// <summary>
        /// Método disparado al hacer click en el boton Buscar
        /// dependiendo de la selección del RadioButtonList1 se llena el GridPropiedades 
        /// por nombre del hotel o por nombre de la propiedad 
        /// </summary>
        protected void ButtonBuscar_Click(object sender, ImageClickEventArgs e)
        {
            switch (RadioButtonList1.Text)
            {
                case "Por Nombre":
                    LlenarListaPropiedades("nombre", TextBox1.Text);
                    break;
                case "Por Hotel":
                    LlenarListaPropiedades("hotel", TextBox1.Text);
                    break;
            }
        }

        #endregion
    }
}